home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_100
/
170_01
/
funkey.c
< prev
next >
Wrap
Text File
|
1980-01-01
|
4KB
|
164 lines
/* FUNKEY.C - a program for redefining fyunction keys */
/* */
/* Copyright (C) 1983 Kenneth C. Wood */
/* */
/* From PC Magazine - - June 1983 Page 424 */
/* */
/* Works with IBM PC-DOS 2.0 - to use it, have on your */
/* system disk the files: */
/* ANSI.SYS - supplied with DOS */
/* CONFIG.SYS - file with the line "device = ansi.sys" in it */
/* and one or more files with the extension .KEY i.e. */
/* WORDSTAR.KEY, MYOWN.KEY, FUNKEY.KEY, or */
/* DOS.KEY - supplied by you and containing */
/* your chosen new key definitions, and of course */
/* FUNKEY.EXE - the compiled and linked FUNKEY.C */
/* */
/* Now when the system is booted, the ANSI terminal */
/* emulator device driver will be installed, giving */
/* you the capability to do marvelous things, including */
/* redefine the function keys by issuing the command: */
/* FUNKEY MYOWN.KEY */
#define SEQ "\033[0;" /* Initial sequence to ANSI driver */
#include "stdio.h" /* Copy in the standard I/O routines */
main(argc,argv)
int argc;
char *argv[];
{
FILE *fp, *fopen();
if (argc == 1)
{
printf("\nEnter new key definitions\n\n");
fkey(stdin); /* get input from keyboard */
}
else
{
fp = fopen(*++argv,"r");
fkey(fp); /* get input from the file */
}
}
int count = 0; /* counter for tracking size of the table */
fkey(fp)
FILE *fp;
{
int c,offset;
/* input character and function key identifier */
while((c=getch(fp)) != EOF)
{
switch (c)
{
case 'f': /* F1 through F10 */
offset = 58;
func(getch(fp),offset,fp);
break;
case 's': /* Shift F1 through F10 */
offset = 83;
func(getch(fp),offset,fp);
break;
case 'c': /* Control F1 through F10 */
offset = 93;
func(getch(fp),offset,fp);
break;
case 'a': /* Alt F1 through F10 */
offset = 103;
func(getch(fp),offset,fp);
break;
case 'F': /* F1 through F10 */
offset = 58;
func(getch(fp),offset,fp);
break;
case 'S': /* Shift F1 through F10 */
offset = 83;
func(getch(fp),offset,fp);
break;
case 'C': /* Control F1 through F10 */
offset = 93;
func(getch(fp),offset,fp);
break;
case 'A': /* Alt F1 through F10 */
offset = 103;
func(getch(fp),offset,fp);
break;
default:
printf("Unknown function key\n");
break;
}
}
}
getch(fp)
/* throw away white space until a character */
FILE *fp;
{
int x;
while((x=getc(fp)) == ' '|| x == '\n' || x == '\t')
; /* ignore white space */
return(x);
}
func(c,offset,fp)
/* send out the required definition sequence */
int c,offset;
FILE *fp;
{
int x,save;
save = ' ';
while ((x = getch(fp)) != '=')
if (x == '0') c = ':';
/* read until get = sign */
/* if character is 0 then F10 was chosen */
/* rather than F1. Change c so that offset is */
/* calculated correctly */
printf(SEQ);
printf("%d",offset+(c-'0'));
/* putchar(';');
putchar('"');
*/
while ((x = getc(fp)) != '\n')
{
if (x != '!')
{
/* putchar(x); */
printf(";%2d",x);
if (++count == 128)
{
printf("\nTable size exceeded. Program terminated...\n");
exit();
}
}
else
save = x;
}
/*putchar('"');*/
if (save == '!')
{
printf(";13p");
count++;
}
else
printf("p");
save = ' ';
if (count == 128)
{
printf("\nTable size exceeded. Program terminated...\n");
exit();
}
}
/* end of Program Funkey.C */